/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package SessionBeans;

import entity.Habitacion;
import entity.HotelServicio;
import entity.InstanciaHotelServicio;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;

/**
 *
 * @author javier
 */
@Stateless
public class InstanciaHotelServicioFacade extends AbstractFacade<InstanciaHotelServicio> {
    @PersistenceContext(unitName = "Agencia_de_Turismo_ASPU")
    private EntityManager em;

    protected EntityManager getEntityManager() {
        return em;
    }

    public InstanciaHotelServicioFacade() {
        super(InstanciaHotelServicio.class);
    }
    
    public List<InstanciaHotelServicio> obtenerInstanciasXServicio(HotelServicio hotelServicio, Date fechaInicio, Date fechaFin) {
        TypedQuery<InstanciaHotelServicio> q = em.createQuery("SELECT iHS "
                                                            + "FROM InstanciaHotelServicio iHS "
                                                            + "WHERE ((iHS.fechaEntrada BETWEEN :fechaInicio AND :fechaFin) OR (:fechaInicio BETWEEN iHS.fechaEntrada AND iHS.fechaSalida))"
                                                            + "AND iHS.hotelServicio = :hotelServicio", InstanciaHotelServicio.class);
        q.setParameter("fechaInicio", fechaInicio);
        q.setParameter("fechaFin", fechaFin);
        q.setParameter("hotelServicio", hotelServicio);
        return q.getResultList();       
    }
    
    
    public List<Habitacion> obtenerDisponibilidadHabitacion(HotelServicio hotelServicio,Date fechaInicio, Date fechaFin){
        List<Habitacion> resultado = hotelServicio.getHabitaciones();
        for(Iterator<InstanciaHotelServicio> it = this.obtenerInstanciasXServicio(hotelServicio, fechaInicio, fechaFin).iterator();it.hasNext();){
            Habitacion hab = it.next().getHabitacion();
            resultado.remove(hab);
        }
        return resultado;
    }
}
